#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

import commands
import re

class IwList:
    """
    Classe permettant de recuperer les infos de la commande iwlist
    """
    def __init__(self,session):
        """Fonction d'initialisation
        """
        self.session=session
        self.su=[]
        self.u=""
        self.listdico=[]
        self.regex=""
        self.result_regex=""
        self.dico={}
    
        

    def iwList(self,param):
        """
        Cette fonction lance iwlist
        Elle splitte le resultat par cellule captee, et parse le resultat pour recuperer les infos
        Le tout est stocke dans un dico puis affiche (Ou? dans la page de resultat?)
        """
        # Lancement d' iWlist
        self.u=commands.getoutput('gksudo iwlist ' +param+' scanning' )
        # découpage du resultat par Céllule et stocké sous forme de liste de dictionnaire avec utilisation de REGEX
        self.su=self.u.split("Cell")
        self.su.pop(0)    
        for element in self.su:
          if element:    
            self.regex=re.compile('(Address): ([0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}).*')
            self.result_regex=self.regex.findall(element)
            self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
            
            self.regex=re.compile('(ESSID):(.*).*')
            self.result_regex=self.regex.findall(element)
            self.dico[self.result_regex[0][0]]=self.result_regex[0][1]

            if re.search('Protocol:',element):
                self.regex=re.compile('(Protocol):IEEE (802.11[abg]{1,2}).*')
                self.result_regex=self.regex.findall(element)
                self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
            
            if re.search('Mode:',element):
                self.regex=re.compile('(Mode):([a-zA-Z]*).*')
                self.result_regex=self.regex.findall(element)
                self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
            
            if re.search('Channel:',element):
                self.regex=re.compile('(Channel):([0-9]{1,2}).*')
                self.result_regex=self.regex.findall(element)
                self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
            
            if re.search('Encryption key:',element):
                self.regex=re.compile('(Encryption key):([onfONF]{2,3}).*')
                self.result_regex=self.regex.findall(element)
                self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
            # Partie avec cryptographie
            if self.result_regex[0][1]== 'off':
                self.dico["crypto"] = "None" 
            if self.result_regex[0][1]== 'on':
                if re.search('IE:',element):
                    
                    self.result_regex=re.search('(WEP|WPA)',element)
                    try:
                        enc=self.result_regex.group()
                    except AttributeError:
                        self.dico["crypto"] = "Unknown"
                    else:
                        self.dico["crypto"] = enc

            if re.search('Bit Rates:',element):
                self.regex=re.compile('(Bit Rates):(([0-9]{1,3}\.{0,1}[0-9]{0,3} Mb/s[;\s]*)*).*')
                self.result_regex=self.regex.findall(element)
                s = ' '.join(self.result_regex[0][1].split())
                s = s.replace(';',"")
                self.dico[self.result_regex[0][0]]=s
            
            if re.search('Quality=',element):
                self.regex=re.compile('(Quality)=([0-9]{1,3}/(100|70)).*')
                self.result_regex=self.regex.findall(element)
                self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
            
            if re.search('Signal level=',element) or re.search('Signal level:',element):
                self.regex=re.compile('(Signal level)(=|:)(-{0,1}[0-9]{1,3} dBm).*')
                self.result_regex=self.regex.findall(element)
                self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
            
            if re.search('Extra:',element):
                self.regex=re.compile('(Extra):[ ]{0,1}(.*)[\s]')
                self.result_regex=self.regex.findall(element)
                self.dico[self.result_regex[0][0]]=self.result_regex[0][1]
            
            self.listdico.append(self.dico)

            self.dico={}
        # cellule renvoyé a travers une liste de dictionnaire
        return self.listdico
        

if __name__=="__main__":

    test= IwList("un")
    test.iwList('wlan0')

    for element in test.listdico:
        print element

    for element in test.listdico:
        print '\r\n'
        print element

